package tools

import (
	"fmt"
	"github.com/google/uuid"
	"os"
	"strconv"
	"strings"
	"unicode"
)

// IsUpper 判断字符串首字母是否大写
func IsUpper(str string) bool {
	if len(str) == 0 {
		return false
	}
	firstChar := rune(str[0])
	if unicode.IsUpper(firstChar) {
		return true
	} else {
		return false
	}
}

// CamelToSnake 驼峰命名转蛇形命名
func CamelToSnake(camelCase string) string {
	var result []rune
	for i, r := range camelCase {
		if i > 0 && unicode.IsUpper(r) {
			result = append(result, '_')
		}
		result = append(result, unicode.ToLower(r))
	}
	return string(result)
}

// LowerFirst 将字符串首字母转为小写
func LowerFirst(str string) string {
	if len(str) == 0 {
		return ""
	}
	firstChar := str[0]
	if unicode.IsUpper(rune(firstChar)) {
		return string(unicode.ToLower(rune(firstChar))) + str[1:]
	}
	return str
}

// PathExists 判断文件夹是否存在
func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

// string 转 int
func StrToInt(s string) int {
	num, err := strconv.Atoi(s)
	if err != nil {
		fmt.Println(err)
	}
	return num
}

func GetID() string {
	return strings.ReplaceAll(uuid.New().String(), "-", "")
}
